#include <stdio.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <sys/wait.h>
int main(int argc, char const *argv[])
{
    /*打开文件*/
    int fd = open("./record.txt", O_RDWR);
    if (fd == -1)
    {
        perror("open erroe");
        _exit(-1);
    }
    /*获取文件大小*/
    int length = lseek(fd, 0, SEEK_END);

    /*创建共享存储映射*/
    char *addr = (char *)mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    if (addr == MAP_FAILED)
    {
        perror("mmap error:");
        _exit(-1);
    }

    /*关闭文件*/
    close(fd);

    /*创建子进程*/
    pid_t pid = fork();
    if (pid < 0)
    {
        perror("pid error:");
        _exit(-1);
    }
    else if (pid == 0)
    {
        /* 子进程  读*/
        sleep(1);
        printf("addr = %s\n", addr);
    }
    else
    {
        /* 父进程  写*/
        const char *data = "不忘初心&砥砺前行";

        /*往共享存储映射写入数据*/
        strcpy(addr, data);

        /*阻塞回收子进程*/
        wait(NULL);
        printf("recycls succes.\n");
    }

    return 0;
}
